﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Manager.Camada.Logica;
using Manager.Camada.Negocio;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace Manager.Camada.BancoDados
{
    public class ClienteDAOImpl : ClienteDAO
    {
        EmpresaDAOImpl daoEmpresa = new EmpresaDAOImpl();
        string strConnection = ConfigurationManager.ConnectionStrings["ConexaoBanco"].ConnectionString.ToString();

        public int inserirCliente(ClienteVO cliente)
        {
            int idCliente = 0;

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {

                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlInsert = "INSERT INTO CLIENTE " +
                                       "(IDEMPRESA,NOME,NOME_FANTASIA,CEP,ENDERECO,BAIRRO,CIDADE,UF,NUMERO,OBSERVACAO) " +
                                       "VALUES " +
                                       "(@IdEmpresa,@Nome,@NomeFantasia,@Cep,@Endereco,@Bairro,@Cidade,@Uf,@Numero,@Observacao)select SCOPE_IDENTITY()";

                    SqlCommand cmd = new SqlCommand(sqlInsert, sqlconnection,transaction);

                    cmd.Parameters.AddWithValue("@IdEmpresa", cliente.empresa.idEmpresa);
                    cmd.Parameters.AddWithValue("@Nome", cliente.nome);
                    cmd.Parameters.AddWithValue("@NomeFantasia", cliente.nomeFantasia);
                    cmd.Parameters.AddWithValue("@Cep", cliente.cep);
                    cmd.Parameters.AddWithValue("@Endereco", cliente.endereco);
                    cmd.Parameters.AddWithValue("@Bairro", cliente.bairro);
                    cmd.Parameters.AddWithValue("@Cidade", cliente.cidade);
                    cmd.Parameters.AddWithValue("@Uf", cliente.uf);
                    cmd.Parameters.AddWithValue("@Numero", cliente.numero);
                    cmd.Parameters.AddWithValue("@Observacao", cliente.observacao);

                    idCliente = Convert.ToInt32(cmd.ExecuteScalar());

                    transaction.Commit();
                    sqlconnection.Close();
                    
                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }


                return idCliente; 
   
            }
            
        }

        private ClienteVO mountCliente(DataRow row)
        {
            ClienteVO cliente = new ClienteVO();
            cliente.idCliente = Convert.ToInt32(row["IDCLIENTE"]);
            EmpresaVO empresa = daoEmpresa.buscaEmpresaPorId(Convert.ToInt32(row["IDEMPRESA"]));
            cliente.empresa = empresa;
            cliente.nome = Convert.ToString(row["NOME"]);
            cliente.nomeFantasia = Convert.ToString(row["NOME_FANTASIA"]);
            cliente.cep = Convert.ToInt32(row["CEP"]);
            cliente.endereco = Convert.ToString(row["ENDERECO"]);
            cliente.bairro = Convert.ToString(row["BAIRRO"]);
            cliente.cidade = Convert.ToString(row["CIDADE"]);
            cliente.uf = Convert.ToString(row["UF"]);
            cliente.numero = Convert.ToInt32(row["NUMERO"]);
            cliente.observacao = Convert.ToString(row["OBSERVACAO"]);

            return cliente;
        }

        private List<ClienteVO> mountListaCliente(DataTable tbCliente)
        {
            List<ClienteVO> listaCliente = new List<ClienteVO>();

            foreach (DataRow row in tbCliente.Rows)
            {
                ClienteVO cliente = new ClienteVO();
                cliente.idCliente = Convert.ToInt32(row["IDCLIENTE"]);
                EmpresaVO empresa = daoEmpresa.buscaEmpresaPorId(Convert.ToInt32(row["IDEMPRESA"]));
                cliente.empresa = empresa;
                cliente.nome = Convert.ToString(row["NOME"]);
                cliente.nomeFantasia = Convert.ToString(row["NOME_FANTASIA"]);
                cliente.cep = Convert.ToInt32(row["CEP"]);
                cliente.endereco = Convert.ToString(row["ENDERECO"]);
                cliente.bairro = Convert.ToString(row["BAIRRO"]);
                cliente.cidade = Convert.ToString(row["CIDADE"]);
                cliente.uf = Convert.ToString(row["UF"]);
                cliente.numero = Convert.ToInt32(row["NUMERO"]);
                cliente.observacao = Convert.ToString(row["OBSERVACAO"]);

                listaCliente.Add(cliente);
            }

            return listaCliente;
        }

        public List<ClienteVO> buscaTodosClientePorIdEmpresa(int idEmpresa)
        {
            List<ClienteVO> listaCliente = new List<ClienteVO>();

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "SELECT * FROM CLIENTE WHERE IDEMPRESA = @IdEmpresa";

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection,transaction);

                    cmd.Parameters.AddWithValue("@IdEmpresa", idEmpresa);

                    SqlDataReader dr = cmd.ExecuteReader();

                    DataTable tblPermissao = new DataTable();
                    tblPermissao.Load(dr);

                    if (tblPermissao.Rows.Count > 0)
                    {
                       listaCliente = mountListaCliente(tblPermissao);
                    }

                    transaction.Commit();
                    sqlconnection.Close();
                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }

            }

            return listaCliente;
        }

        public ClienteVO buscaClienteIdCliente(int idCliente)
        {
            ClienteVO cliente = new ClienteVO();

            using (SqlConnection sqlconnection = new SqlConnection(strConnection))
            {
                sqlconnection.Open();

                SqlTransaction transaction = sqlconnection.BeginTransaction("SampleTransaction");

                try
                {
                    string sqlBusca = "SELECT * FROM CLIENTE WHERE IDCLIENTE = @IdCliente";

                    SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection, transaction);

                    cmd.Parameters.AddWithValue("@IdCliente", idCliente);

                    SqlDataReader dr = cmd.ExecuteReader();

                    DataTable tblPermissao = new DataTable();
                    tblPermissao.Load(dr);

                    if (tblPermissao.Rows.Count > 0)
                    {
                        foreach (DataRow row in tblPermissao.Rows)
                        {
                            cliente = mountCliente(row);
                        }
                    }

                    transaction.Commit();
                    sqlconnection.Close();
                }
                catch
                {
                    transaction.Rollback();
                    sqlconnection.Close();
                }

            }

            return cliente;
        }


        //public void inserirCliente(ClienteVO cliente)
        //{
        //    ISession session = ConnectionFactory.getConnection().OpenSession();
        //    ITransaction transaction = session.BeginTransaction();

        //    try
        //    {
        //        session.Save(cliente);
        //        transaction.Commit();
        //        session.Close();
        //    }
        //    catch
        //    {
        //        transaction.Rollback();
        //        session.Close();
        //    }

        //}

        


        //-------------------------------------------------------------------------------------------------------------------
        //public List<ClienteVO> getListaTodosClientes()
        //{
        //    List<ClienteVO> listaCliente = new List<ClienteVO>();

        //    SqlConnection sqlconnection = new SqlConnection(strConnection);

        //    try
        //    {
        //        string sqlBusca = "SELECT * FROM CLIENTE";

        //        sqlconnection.Open();

        //        SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection);

        //        SqlDataReader dr = cmd.ExecuteReader();

        //        DataTable tblPermissao = new DataTable();
        //        tblPermissao.Load(dr);

        //        if (tblPermissao.Rows.Count > 0)
        //        {
        //            foreach (DataRow item in tblPermissao.Rows)
        //            {
        //                listaCliente.Add(mountCliente(item));
        //            }
        //        }
        //    }
        //    catch
        //    {
        //        sqlconnection.Close();
        //    }

        //    sqlconnection.Close();

        //    return listaCliente;
        //}

        //private ClienteVO mountCliente(DataRow row)
        //{
        //    ClienteVO cliente = new ClienteVO();
        //    cliente.idCliente = Convert.ToInt32(row["idCliente"]);
        //    cliente.nome = Convert.ToString(row["razaoSocial"]);
        //    cliente.cep = Convert.ToInt32(row["cep"]);
        //    cliente.endereco = Convert.ToString(row["endereco"]);
        //    cliente.bairro = Convert.ToString(row["bairro"]);
        //    cliente.cidade = Convert.ToString(row["cidade"]);
        //    cliente.uf = Convert.ToString(row["uf"]);
        //    cliente.numero = Convert.ToInt32(row["numero"]);
        //    cliente.email = Convert.ToString(row["email"]);
        //    cliente.contato = Convert.ToString(row["contato"]);
        //    cliente.telefone = Convert.ToString(row["telefone"]);

        //    return cliente;
        //}

        //public ClienteVO getCliente(long idCliente)
        //{
        //    ClienteVO cliente = new ClienteVO();

        //    SqlConnection sqlconnection = new SqlConnection(strConnection);

        //    try
        //    {
        //        string sqlBusca = "SELECT * FROM CLIENTE WHERE idCliente = @idCliente";

        //        sqlconnection.Open();

        //        SqlCommand cmd = new SqlCommand(sqlBusca, sqlconnection);

        //        cmd.Parameters.AddWithValue("@idCliente", idCliente);

        //        SqlDataReader dr = cmd.ExecuteReader();

        //        DataTable tblPermissao = new DataTable();
        //        tblPermissao.Load(dr);

        //        if (tblPermissao.Rows.Count > 0)
        //        {
        //            foreach (DataRow row in tblPermissao.Rows)
        //            {
        //                cliente = mountCliente(row);
        //            }
        //        }
        //    }
        //    catch
        //    {
        //        sqlconnection.Close();
        //    }

        //    sqlconnection.Close();

        //    return cliente;
        //}
    }
}


 